package com.ruoyi.system.dto;

import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Min;
import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 合同付款周期更新数据传输对象
 * 用于接收和传递付款周期更新时的相关参数
 */
@Data
public class ContractPaymentScheduleUpdateDTO {

    /**
     * 付款周期唯一标识（主键ID）
     */
    @NotNull(message = "付款周期ID不能为空")
    private Long id;

    /**
     * 付款方式
     * 枚举值：1-现金，2-银行转账，3-支票，4-其他
     */
    @NotNull(message = "付款方式不能为空")
    @Min(value = 1, message = "付款方式值无效")
    private Integer paymentMethod;

    /**
     * 分期期数
     * 例如：1表示第一期，2表示第二期
     */
    @NotNull(message = "分期期数不能为空")
    @Min(value = 1, message = "分期期数必须大于0")
    private Integer installment;

    /**
     * 付款时间节点（预计付款日期）
     * 格式：YYYY-MM-DD
     */
    @NotNull(message = "付款日期不能为空")
    private LocalDate paymentDate;

    /**
     * 付款金额
     * 精度：12位数字，2位小数
     */
    @NotNull(message = "付款金额不能为空")
    @DecimalMin(value = "0.01", message = "付款金额必须大于0")
    private BigDecimal paymentAmount;

    /**
     * 付款状态
     * 枚举值：0-未付款，1-已付款，2-部分付款，3-逾期
     */
    private Integer paymentStatus;

    /**
     * 实际付款日期
     * 格式：YYYY-MM-DD，可为空
     */
    private LocalDate actualPaymentDate;

    /**
     * 实际付款金额
     * 精度：12位数字，2位小数，可为空
     */
    @DecimalMin(value = "0.00", message = "实际付款金额不能为负数")
    private BigDecimal actualPaymentAmount;

    /**
     * 付款备注
     * 记录付款相关说明信息
     */
    private String paymentRemark;
}
